集合List的理论最大长度(ArrayList\LinkedList)

您所在的位置:网站首页 java list arraylist linkedlist 集合List的理论最大长度(ArrayList\LinkedList)

集合List的理论最大长度(ArrayList\LinkedList)

2023-07-14 03:28| 来源: 网络整理| 查看: 265

集合List的理论最大长度(ArrayList\LinkedList) 1.我们先来看ArrayList的长度(不考虑内存等,理论值)

ArrayList我们都知道是数组实现的,那么数组的最大长度其实就是ArrayList的最大长度,说到这里,其实有人已经有答案了。其实我们看一下它的length属性就可以了。length属性是32位的有符号整数,它的最大值是2的31次幂,就是2G。为何有这个限制呢?为什么length的属性不是long型呢?我们假设一下,如果它是long型的,那么它的最大长度是2的63次幂。内存永远也不会有那么大吧。即使是字节数组长度是int的,最大长都达到2GB.

由此想到了String,这个家伙底层也是基于数组的,是一个字符数组。字符是16位的基本类型,一个String的最大长度是多少呢?就是字符数组的最大长度也是2G,占用内存是4GB。

一个数组最大的长度是一个 int 的最大值,也就是 2147483647(2的31次方减1),而一个字符串在 Java 内部是使用 char[] 来表示的,也就是说一个字符串的最大长度是 2147483647。

不过这些都是理论值,具体能放多少与 JVM 内存有关, 可以在执行 java 命令时加上 -Xmx 1024m 就将 JVM 内存最大置为了 1G, 默认情况下是 64MB.

可以写一个String[]死循环添加数组,消耗内存,看看会不会死机。

实际开发中,虚拟机默认内存大小根据不同的虚拟机实现有所不同,可以在启动应用时用-Xmx调整最大堆大小,比如调整堆最大大小为2G: 一般四五十万的数据是放得下的。

2.我们再来看LinkedList的长度(不考虑内存等,理论值)

linkdedList集合石链表实现的,在内存理想的情况下,理论上是可以无限的去存储元素的。

其实,不论是ArrayList还是LinkdeList,我们上面说的都是它的理论值,实际开发中都会受限与硬件的影响,在开发中,我们当时List中存放的是图片二进制流,在存储到500条数据的时候,内存就不够用了,只能重新处理,在开发中还是要注意这方面的问题。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3